<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="d3-tip.css">
</head>
<body>
    
    <script src="d3.min.js"></script>
    <!-- <script src="https://d3js.org/d3.v7.min.js"></script> -->
    <script src="d3-tip.js"></script>
    <script>
        
        const svg = d3.select('body').append('svg');
        svg.attr('width',800);
        svg.attr('height',600);
        svg.style('border','2px solid #ccc');


        const x = d3.scaleLinear([10,20],[0,500]).nice();

        const xAxis = d3.axisBottom(x);

        // const g = svg.append('g').attr('transform','translate(100,300)');
        
        // g.call(xAxis);     
        
        // const brush = d3.brush().extent([[0,-100],[500,0]]).handleSize(20)
        //     .on('brush',function(e){
        //         console.log('brush',e);
        //     })
        //     .on('start',function(e){
        //         console.log('start',e);
        //     })
        //     .on('end',function(e){
        //         console.log('end',e);
        //     })
        // g.call(brush);
        // g.call(brush.move,[[50,-100],[100,0]])
        //  .on('dblclick',function(){
        //     console.log(arguments)
        //  })

        // const array = [150,350,550]

        // const brush = d3.brush().extent([[0,-100],[500,0]])

        // const gs = svg.selectAll('g')
        //     .data(array)
        //     .join('g')
        //     .attr('transform',d=>`translate(100,${d})`)
        //     .call(xAxis)
        //     .call(brush)
        //     .call(brush.move,(d,i)=>[[i*100,-100],[(i+1)*100,0]])
        //     .on('dblclick',function(e,d){
        //         d3.select(this).call(brush.clear)
        //     })

        const brush = d3.brush().extent([[0,-100],[500,0]])
            .on('brush',function(e,d){
                if(e.selection == null){
                    //没有刷子
                    circles.attr('fill','#888');
                }else{
                    //有刷子
                    const [min , max] = e.selection;
                    circles.attr('fill',d=>d>x.invert(min[0]) && d<x.invert(max[0])?'red':'#888')
                }
            })

        const g = svg.append('g')
            .attr('transform','translate(100,500)')
            .call(xAxis)
            .call(brush)


        const cxs = Float32Array.from({length:200},d3.randomUniform(...x.domain()));    
        
        const circles = g.selectAll('circle')
            .data(cxs)
            .join('circle')
            .attr('cx',d=>x(d))
            .attr('cy',d3.randomNormal(-50,15))
            .attr('r',4)
            .attr('fill','#888')
        
    </script>
</body>
</html>